// 和为k的子数组
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
// var subarraySum = function(nums, k) {
//     let cnt = 0;
//     let sum0_i = 0, sum0_j = 0;
//     let map = new Map();
//     map.set(0, 1);
//     for (let i = 0; i <= nums.length; i++) {
//         sum0_i += nums[i];
//         sum0_j = sum0_i - k;
//         console.log('map', sum0_j, map.get(sum0_j))
//         if (map.has(sum0_j)) {
//             cnt += map.get(sum0_j);
//         }
//         let sumCnt = map.get(sum0_i) || 0;
//         map.set(sum0_i, sumCnt + 1);
//     }
//     return cnt;
// };
var subarraySum = function(nums, k) {
    const mp = new Map();
    mp.set(0, 1);
    let count = 0, pre = 0;
    for (const x of nums) {
        pre += x;
        if (mp.has(pre - k)) {
            count += mp.get(pre - k);
        }
        if (mp.has(pre)) {
            mp.set(pre, mp.get(pre) + 1);
        } else {
            mp.set(pre, 1);
        }
    }
    return count;
};
